package com.moli.iov.manager.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moli.iov.manager.model.dto.AuthoritySysUserQueryDto;
import com.moli.iov.manager.model.po.AuthorityRoleAuth;
import com.moli.iov.manager.model.po.AuthoritySysUser;
import com.moli.iov.rest.RestResponse;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author sy
 * @since 2018-12-13
 */
public interface IAuthoritySysUserService extends IService<AuthoritySysUser> {


    /**
     * 新增或者更新用户
     *
     * @param authoritySysUser
     * @return
     */
     RestResponse saveUser(AuthoritySysUser authoritySysUser);

    /***
     * 根据用户id查询用户
     * @param id
     * @return
     */
     RestResponse queryUserById(long id);


    /**
     * 分页查询用户信息，包含筛选功能
     * @param authoritySysUserQueryDto
     * @return
     */
     IPage<AuthoritySysUser> querySysUserByPage(AuthoritySysUserQueryDto authoritySysUserQueryDto);

    /**
     * 根据账户查询
     * @param authoritySysUserQueryDto
     * @param status 0,正常；1，禁用，2，全部
     * @return
     */
    RestResponse<AuthoritySysUser> getUserByAccount(AuthoritySysUserQueryDto authoritySysUserQueryDto,int status);



    /**
     * 根据账户查询
     * @param authoritySysUserQueryDto
     * @return
     */
//    RestResponse<AuthoritySysUser> getUserByAccount(AuthoritySysUserQueryDto authoritySysUserQueryDto);


    /**
     * 缓存用户权限变动标记,登陆后缓存进去
     * @param userId
     */
    void setUserAuthCache(Long userId);

    /**
     * 获取用户权限变动标记，拦截器中校验
     * @param userId
     */
    String getUserAuthCache(Long userId);

    /**
     * 当权限变动后调用logout清除用户session
     * @param userId
     */
    void clearUserAuthCache(Long userId);


    /**
     * 根据roleId查找关联此roleId的所有用户
     * @param roleId
     * @return
     */
    List<AuthoritySysUser> getUsersByRoleId(Long roleId);

    /**
     * 根据roleid清除相关用户缓存中权限标记，让其重新登陆
     * @param roleId
     */
    void clearUserAuthCacheByRoleId(Long roleId);


//    /**
//     * 批量修改用户的属性
//     * @param authoritySysUsers 待修改的用户列表
//     */
//    void updateUsersBatch(List<AuthoritySysUser> authoritySysUsers);


    /**
     * 根据用户id删除用户
     * @param authoritySysUser
     */
    RestResponse deleteUser(AuthoritySysUser authoritySysUser);


    /**
     * 获取即将停用的用户列表，加入到ActiveMq队列中，修改用户账号的时候也需要重新加入队列中
     * @return
     */
    List<AuthoritySysUser> getExpiringUsers();

    /**
     * 修改用户
     * @param authoritySysUser
     * @return
     */
    RestResponse updateUser(AuthoritySysUser authoritySysUser);

}
